⚠️ 提醒:這篇文章是完整的雲端環境評估記錄。
內容會涵蓋成本試算、安全權衡、部署方式等細節,屬於「實務考量」的展開。本文適合「想控制雲端成本」且「熟悉 AWS/Cloudflare 基礎」的讀者。如果只是想快速驗證功能,直接用 Vercel/Zeabur 更快。如果是雲端新手,建議先熟悉基礎後再閱讀。
Day02 定義的是「企業內部專案」,如果是依照 Day02 定義,Day27 的本地驗收已足夠。但考慮到:
因此 Day28-29 會展示「雲端部署方案」作為參考,進入最容易「燒錢」也最常被忽略的環節:雲端環境評估。我會用最小可行(但安全)的方式,把 Demo 架構搬到雲上:
今天(Day28)的內容會是架構評估與成本試算,明天(Day29)則是實際部署以及處理入口安全性。
本文所有價格以 2025/09–10 的官方定價為準,文末會標註我的假設與取捨。

系統架構圖(System Architecture Diagram)
在上生產線實戰環節,我會分成五個表格來羅列可能會花費的成本,分別是:AWS、Cloudflare、GitHub、Grafana Cloud 以及 OpenAI。這份表格的有效性建立在 2025 年 9 ~10月的期間,如果後續有人看到這篇文章與實際上的價目表有出入,請自行查找官方文件,以免造成費用損失。
我是部署在東京區域,以東京區域(ap-northeast-1)為準,通常北美區域的定價會是最便宜的。我這個 AWS 帳號是在 2025 年 8 月辦的,所以只有 6 個月 Free Tier / $100 Credits 可以折抵。
| 服務 | 是否有 Free Tier / 免費額度 | 以 RAG-FAQ-BOT 實際部署上去是否計費 | 備註 |
|---|---|---|---|
| EC2(t4g.medium) | 有 Free Tier(t4g.small),但不符合本案實際需求 | 💰 約 $0.0432 / 小時(東京區,Linux/按需) | 2 vCPU、4 GiB RAM。適合跑 FastAPI / Python 應用,比 Free Tier 涵蓋的 t4g.small(2 GiB RAM)更穩定。若長時間執行建議搭配 Budgets 設警示。(Amazon Web Services, Inc.) |
| EBS(根磁碟) | 30 GB 儲存 + 200 萬 I/O + 1 GB Snapshot | 💰 約 $1.44 / 月(若帳號仍在 Free Tier 期間則 $0,但不在 Free Tier 的 EC2 則不會套用) | 東京區 gp3 約 $0.096/GB-month;本例 15 GB × 0.096 = $1.44。Free Tier 配額合併計算,停機仍計費;刪除才歸零。(Amazon Web Services, Inc.) |
| ElastiCache for Redis | (僅限 2025-07-15 前註冊帳號)cache.t3.micro 750 小時 / 月(12 個月) | ⚠️ 帳號 2025/08 新開 → 不適用💰 約 $0.0208 / 小時(全區域通用估算) | 若在 2025-07-15 之後開戶,這項 Free Tier 不一定提供。(Amazon Web Services, Inc.) |
| CloudWatch Metrics | 免費層(多數 AWS 服務的基本指標免費) | ✅ 多數情況免費,AWS 服務自帶的 metrics 是免費的 | 付費多集中在自訂 metrics。(Amazon Web Services, Inc.) |
| SSM Parameter Store(標準) | Always Free(標準參數、不啟用進階) | ✅ 免費 | 可存純文字與 KMS 加密參數;常用於取代 Secrets Manager。〔官方定價頁未集中列本項免費額度,屬 Always Free 類型〕 |
| Secrets Manager | 無 Free Tier | 💰 $0.40 / secret / 月 + $0.05 / 1k API calls | 若要省錢可改存 Parameter Store(自行管理 rotation)。〔官方定價頁〕 |
| S3 | 5 GB 標準儲存(12 個月) | ✅ 免費⚠️ 超出才收費 | 存 FAISS index 通常很小。〔AWS Free Tier 總覽頁〕💡S3 傳回 EC2:同區域免費;若 EC2 取 S3 檔案不會收費。 |
| AWS Budgets | Budgets 本身免費;含動作的 Budgets 前 2 個免費 | ✅ 免費 | 建議設超額/Free Tier 用量警示。(Amazon Web Services, Inc.) |
| VPC | 單純 VPC + Subnet + Route Table 幾乎是 0 元。⚠️ Free Tier 的 EIP(Elastic IP):若綁定並持續使用在一台執行中的 EC2 上,免費;但如果 沒綁定 / 綁定但 EC2 沒跑,就會收 $0.005/hr。 | 💰 $0.005 IP/hr,約 $3.65/每 IP・每月 以 730 小時計(EC2 需要綁定 Public IP 才能出網) | 同一 AZ 內:免費跨 AZ:有流量費(目前大約 $0.01/GB)。 |
| EC2 Egress | 無 Free Tier | 以東京區 (ap-northeast-1) 來看:✅ 前 1GB/月免費💰 1GB 之後:$0.114/GB(東京區價格,比美東貴一點) | FastAPI 應用在 EC2 上回應 Cloudflare Worker 的請求,那些回應流量(HTML/JSON 給外部用戶)全部算 出網費。 |
| 類別 | Free 計畫內容 | 以 RAG-FAQ-BOT實際部署上去是否計費 | 備註 |
|---|---|---|---|
| Workers | 100,000 requests / 日(每日 00:00 UTC 重置) | ✅ 免費 | 超過即失敗或需升級;程式裡面 Error Handler 可選「fail open / fail closed」。(Cloudflare Docs) |
| Pages | 每月 500 次 build(Free) | ✅ 免費 | Pages Functions 的請求會算進 Workers 配額。(Cloudflare Docs) |
| Zero Trust / Access | 免費(適合 ≤ 50 使用者) | ✅ 免費 | 設定 Access 規則時務必選 Service Auth(避免被導到使用者登入流程)。(Cloudflare) |
| Tunnel(cloudflared) | 用於反向代理到內部服務 | ✅ 免費(我甚至沒買域名) | 建議正式使用 Named Tunnel + 自網域;Quick Tunnel 僅適合開發。〔官方建議方向〕 |
| 項目 | Free / 內含額度(Private Repo) | 以 RAG-FAQ-BOT實際部署上去是否計費 | 備註 |
|---|---|---|---|
| Actions(GitHub-hosted runners) | 2,000 分鐘 / 月(Linux runner 計 1 倍;Windows ×2;macOS ×10) + 500 MB Artifacts 儲存 | ✅ 免費 | 超過配額後依 runner 類型計價。公有 repo 無限免費;Private Repo 會消耗這 2,000 分鐘額度。自託管 runner 不吃分鐘數。(GitHub Docs) |
| GHCR(Container Registry) | 500 MB 儲存(包含 Packages / Container Registry) | ✅ 免費 | 公有 repo 套件免收費;Private Repo 則包含在免費 500 MB 儲存配額內,超過會依用量收費。官方文件同時提醒,單一 layer 上限 10 GB 與頻寬限制仍適用。(GitHub Docs) |
| 項目 | Free / 內含額度 | 以 RAG-FAQ-BOT實際部署上去是否計費 | 備註 |
|---|---|---|---|
| Metrics | 10,000 active series,14 天保留期 | ✅ 免費 | 足夠 Demo 使用;超出需升級付費方案。 |
| Users / Teams | 3 個使用者 | ✅ 免費 | Free Plan 最多 3 人;協作時若人數更多需升級。 |
| Dashboards | 無特別限制 | ✅ 免費 | 主要受限於 active series / 保留期。 |
| Integrations | 包含多數常見 Cloud / App 整合(AWS、Prometheus Remote Write 等) | ✅ 免費 | Demo 常見需求足夠。 |
| 項目 | 免費額度 | 以 RAG-FAQ-BOT實際部署上去是否計費 | 備註 |
|---|---|---|---|
| OpenAI API | 無一般性 Free Tier | 💰依 token 計費 | 例如 gpt-4o-mini:$0.15 / 1M input、$0.60 / 1M output(作為成本估算基準);實際以定價頁為準。(OpenAI) |
| 項目 | 單價 / 假設 | 預估月費 (USD) |
|---|---|---|
| EC2 t4g.medium | $0.0432/hr × 720h ≈ $24.2/月 | $31.104 |
| EBS 根磁碟(gp3 15 GB) | $0.096/GB-month × 15 GB ≈ $1.44/月 | $1.44 |
| ElastiCache Redis (cache.t3.micro) | $0.0208/hr × 720h ≈ $15/月 | $15.0 |
| CloudWatch Metrics | 只用內建(免費) | $0 |
| SSM Parameter Store (標準) | Always Free | $0 |
| Secrets Manager | $0.40/secret-月;假設 2–3 個 secret = $0.8–1.2 | $0.8 ~ $1.2 |
| S3 | 5 GB Free Tier;索引很小 → $0 | $0 |
| VPC / EIP | $0.005 IP/hr * 720h = 3.6 | $3.6 |
| EC2 出網流量 (Egress) | 前 100 GB 免費;超過 $0.12/GB | 0(≤100GB) ~ $12(200GB) |
| 查詢量 / 月 | Token 數 (平均 1k/query) | 成本估算 |
|---|---|---|
| 10k queries | 約 10M tokens | ≈ $7.5/月 |
| 50k queries | 約 50M tokens | ≈ $37.5/月 |
| 100k queries | 約 100M tokens | ≈ $75/月 |
| 場景 | AWS 成本 | OpenAI 成本 | 合計/月 |
|---|---|---|---|
| 極輕量 Demo(< 10k 查詢、≤100GB egress) | $55.72 | $7.5 | $63.22 |
| 中等 Demo(~50k、~200GB egress) | $55.72 + $12 = $67.72 | $37.5 | $105.22 |
| 高使用 Demo(~100k、~400GB egress) | $55.72 + $36 = $91.72 | $75 | $166.72 |
本專案使用到的 Terraform IaC 程式碼也會放在 GitHub,有興趣的讀者可以拉下來研究。
⚠️ 這邊請絕對要自己去查 Free Tier 的區域和額度!實務上建立資源都很快,很多時間都是花在事前的評估和 Infrastructure 費用計算,因為 AWS 的 Free Tier Policy 有可能會變。
EC2 能支援 gp3 的 20 GB 免費不代表可以支援 RDS 的 gp3 的 20 GB,而且有沒有獨立計入 Free Tier 也要留意。
另外還有一個容易忽視的成本就是 AWS 的網路費用,特別是 egress 出網費用以及 AZ 之間的網路流量費用。所以這個 Demo 架構會把資源都放在同一個 AZ,我們先犧牲高可用換來節省費用。

AWS Infrastructure 架構圖
建立好所有 Infra 資源之後,確認一下 ec2 instance 能夠順利連線到 RDS Instance 以及 ElastiCache Instance。順便把 Budgets 設定好,不然哪天設定錯誤帳單下來會哭 🫠

AWS Budgets Dashboard
Infra 資源都建立好之後,接下來的工作就是撰寫簡單的後端 API。
如果要串 GitHub CI/CD 這邊要先做幾件事情:
ssm:SendCommand、ssm:List*、ec2:DescribeInstances
deploy_role_arn:放在 Actions Secrets 的 AWS_ROLE_TO_ASSUME
GHCR 是 private 的關係,稍後會需要在 Secrets Manager 存一把 PAT(read:packages)
EC2 的 Instance Role 可以讀到上面的 Secret
secret

接下來確認一下能夠把後端程式碼打包以及推到 ghcr.io,目前結構長這樣,要透過 GitHub Workflow 打包推送 :
.
├── README.md
├── backend
│ ├── Dockerfile
│ ├── app
│ │ └── main.py
│ └── requirements.txt
└── frontend
└── index.html

第一次打包會比較久是正常的
接下來要把打包好的 Image 部署到 EC2 上面,我們要先把以下值存到 GitHub Repo 的 Repository Secrets:
AWS_ROLE_TO_ASSUME(gha-deploy-ssm 的 Role ARN)EC2_INSTANCE_ID(EC2 ID)GHCR_SECRET_ARN(Secrets Manager 裡存 PAT 的 ARN)寫好部署腳本和 GitHub Workflow 之後,可以在 deploy 的 logs console 看到:

連線到 EC2 後驗證容器確實有起來:
sh-5.2$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6a8d07544a34 ghcr.io/hazel-shen/rag-qa-bot:latest "uvicorn app.main:ap…" 14 minutes ago Up 14 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp rag-qa-bot
sh-5.2$ curl -i localhost:8080
HTTP/1.1 200 OK
date: Sat, 20 Sep 2025 09:11:27 GMT
server: uvicorn
content-length: 35
content-type: application/json
{"message":"hello from rag-qa-bot"}
如果是一般的 Demo 情況的話,當然可以自己實作認證的功能。但是實務上在後端加上這些邏輯不但會拉長交付時程,這些功能也不是專案的核心價值,所以我選擇外包給 Cloudflare。
認證這種高風險的基礎建設,如果自己實作不但容易出漏洞,交給 Cloudflare Access / Zero Trust,可以直接用 SSO、多因子驗證、細緻存取策略,安全性與合規水準都比自建高,重點是Cloudflare 免費方案真的有夠佛。

Cloudflare Zero Trust 架構圖
這邊用一張表格說明上面架構圖的元件之間的關係,以及使用到的功能:
| 層級 | 範例域名 / 元件 | 對外狀態 | 保護方式 |
|---|---|---|---|
| 前端 (Cloudflare Pages) | https://yourdomain.com、https://project.pages.dev |
🔐 公開但受保護:需 Cloudflare Access(GitHub Login) 後才可瀏覽 | - Cloudflare Access(Login 規則)-(可選)限制只允許自家網域的 Origin/Referrer-Policy |
| Pages Functions | https://project.pages.dev/api/* |
🔐 受保護:與 Pages 同一組 Access | - 同上(Access)- 注意:Functions 的請求會計入 Workers 配額 |
| Worker (API Proxy) | https://api.yourdomain.com、https://api-proxy.<sub>.workers.dev |
🔐 受保護:Cloudflare Access(Service Auth) 後才可呼叫 | - Access(Service Token,規則置頂)- CORS 白名單(僅允許 Pages 網域)- Rate Limiting(身分/路由/租戶級)- HMAC/Nonce 驗簽、轉發時加 X-From-Worker |
| Tunnel 子網域(內部 API) | Quick Tunnel:https://*.trycloudflare.com(開發)Named Tunnel:https://api-internal.yourdomain.com(正式) |
開發:⚠️ 實務上是可被探測(隨機但對外公開)正式:🔐 僅 Worker 可用(不對外) | - 正式環境:Named Tunnel + 自網域- 後端強制驗 X-From-Worker 或 mTLS(Authenticated Origin Pulls)- 不建議公開對外 DNS;若保留,需再疊 Access/WAF |
| EC2 後端服務 | http://localhost:8080(VPC 內) |
🔒 不公開:僅 cloudflared 連入 |
- SG不開任何入站- 僅 loopback/本機服務- 中介層驗 X-From-Worker(或 HMAC)才處理 |
先部署Day7 的範例前端頁面到 Cloudflare Page 上面,可以選擇匯入現有 Git:

部署完成,點開域名就可以查看頁面,要注意這邊的域名是 對外公開 的。
先拿 Day7 的 Demo 頁面來部署,結果如下:
在這邊我們會需要用到 GitHub APP 作為 Cloudflare 認證的媒介:

設定好了之後可以在 Cloudflare 端測試是否串接成功:


如果不是設定條件的帳號就會登入失敗,這邊在條件設定遇到了神秘的情況,貌似只用 email 會連自己也無法登入:

解法,把 GitHub username 寫上去包含條件:
後來這個設定也可以...? 總之後面有成功。
在前端 Cloudflare Pages 與後端 EC2 / Container Service 之間,我們不直接暴露後端,而是透過 Cloudflare Worker 做一層反向代理(Reverse Proxy)。這樣可以:
為了保護我們的後端 API,會限制來源 Domain 為 https://${你的專案名字}.pages.dev 才能存取這個 URL,所以直接 curl 會得到以下結果:
❯ curl -i https://api-proxy.XXXX.workers.dev/
HTTP/2 403
...
...
...
Forbidden: invalid caller%
但是只靠 CORS 並沒有辦法防止有心人士偽造來源並存取,且 DoS / DDoS 等暴力攻擊仍然會消耗每天十萬次的免費 quota。那要如何兼顧免費又安全的需求呢?
🤝 Cloudflare Access 仍然是你最好的朋友(本文並沒有收到任何廠商贊助)
Cloudflare Access (Zero Trust) 可以在 Worker 入口 就攔截非法請求,沒帶對的 Service Token / Identity 就直接擋掉。不只可以擋掉偽造 Origin,連「根本不應該存在的請求」也不會進到 Worker。

⚠️ 此處有坑,等等會講這張圖的坑在哪...

加上 Access 之後就沒有辦法直接存取 reverse proxy 的域名了。

就是這裡 🔥
請千萬要選 Service Auth,不然你會一直卡在上面人類用的 302 轉導頁面,Cloudflare 會以為你是人類要登入。

官方文件這裡有寫:You can now configure your Access applications and device enrollment permissions to accept this service token. Make sure to set the policy action to Service Auth; otherwise, Access will prompt for an identity provider login.
Response 出現 200 就是過了。
❯ curl -i -s -o -L /dev/null -w '%{http_code} %{redirect_url}\n' \
https://api-proxy.8qrsvmh9rs.workers.dev/ping \
-H "CF-Access-Client-Id: $CF_ACCESS_CLIENT_ID" \
-H "CF-Access-Client-Secret: $CF_ACCESS_CLIENT_SECRET" \
-H "x-from-pages: $PAGES_SECRET"
...
...
...
{"ok":true,"time":"2025-09-20T13:23:28.757Z","worker":true}200
Tips:
- Access 規則有順序,請把「Service Auth」放在最上面,避免被後面的 Login 規則覆蓋。
- Worker 代理到後端前,先刪掉外部來的機敏 Header(如 Authorization、Cookie),只保留你要轉發的簽章或 Service Token。
到這邊比較細心的讀者可能會想說,那假設有人剛好猜中 Service Token,或是有使用者行為比較奇特,會一直拿正確的 Service Token 重複嘗試存取 Worker 的話,我要怎麼做?
明天(Day29)在實際部署的文章中,會示範如何在 Cloudflare Pages Function 實作認證以及 Rate Limit 功能。就算是內部人員,也要防止他們的應用程式亂打(筆者親身經驗😃)。
首先我們要先建立一條開發通道,連上 EC2 之後安裝 .rpm 套件:
curl -LO https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-aarch64.rpm
sudo yum install -y ./cloudflared-linux-aarch64.rpm
# 打開開發通道,Cloudflare 會給你一個臨時網址
cloudflared tunnel --url http://localhost:8080
在沒有自己的網域時,可以暫時維持 Workers 的 *.workers.dev 作為固定入口,讓外部世界始終透過同一個網址存取。實作方式是把 Quick Tunnel 隨機產生的 URL 放到 Worker 的 Secret(例如 BACKEND_ORIGIN),並在每次重啟 cloudflared 後自動更新 Secret、重新 deploy Worker,如此外界只需使用固定的 https://your-worker.xxx.workers.dev。
⚠️ 不過,這種方式只是不花錢的權宜(Demo)之計:
正式上線方案仍應該使用 Named Tunnel + 綁定自己的網域,並加上 Cloudflare Access / WAF / Rate Limit 等機制,才能確保連線的穩定性與安全性。

正式 / Demo 風險比較
如果是以省錢為目標的話,自然是花錢的基礎建設能夠不要自建就不要自建。剛好之前有看到 Grafana Cloud 有一些錢包友善的 Free Plan 給獨立開發者,索性直接拿來用。

不知道為什麼網站上面產生的範例呼叫會有 400 Error,改寫了一下,然後傳送測試 metrics:
# 1) 產生奈秒時間(任何環境都可)
TIME_NANO=$(python3 - <<'PY'
import time; print(int(time.time()*1_000_000_000))
PY
)
echo "timeUnixNano=$TIME_NANO"
# 2) 建 payload(注意 asInt 是數字,timeUnixNano 也是數字,沒有引號)
cat > payload.json <<EOF
{
"resourceMetrics": [{
"resource": { "attributes": [
{ "key": "service.name", "value": { "stringValue": "curl-demo" } }
]},
"scopeMetrics": [{
"scope": { "name": "manual" },
"metrics": [{
"name": "test_metric",
"unit": "s",
"gauge": { "dataPoints": [{
"timeUnixNano": $TIME_NANO,
"asInt": 1,
"attributes": [
{ "key": "bar_label", "value": { "stringValue": "abc" } }
]
}]}
}]
}]
}]
}
EOF
# 3) 送出 Request
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${Grafana 給你的 instance ID}:${你的 API Token}" \
--data-binary @payload.json \
https://${Grafana 給你的 endpoint}}$/otlp/v1/metrics
在 Grafana Cloud Console 上面看到測試資料了 🎉

如果 API Token 沒有存到的話,可以回到一開始的 Console 頁面找 Access Policies:

或是可以在 Grafana Cloud Console 找下面這個子頁面,也可以看到一樣的東西:
Home > Administration > Users and access > Cloud access policies
專案的擴展性和 Log 會留待本系列最後一天(Day30)回覆。
從上面的架構圖來看,不難發現我的實作其實是使用 Cloudflare (Worker + Access + Rate Limit)
去模擬 ALB (反向代理) + WAF (規則/限流) + Cognito/OIDC (驗證)。
以下從 成本、延遲、架構 三個面向說明我在模擬雲端生產環境時的取捨:
ALB 光是「開著不用(流量都還沒進來)」就有固定費(約 $20/月等級),再加上 WAF 基本費,每月硬成本大概 $25–$40。用 Cloudflare 實作,在流量不大時幾乎沒有固定費,能把 TCO(總持有成本,Total Cost of Ownership) 壓到很低。
| 服務 | 定價模式 | 預估月費 (低流量 Demo) | 備註 |
|---|---|---|---|
| ALB (Application Load Balancer) | 固定時費:$0.0272/hrLCU:$0.008/LCU-hr | $19.6 (固定費用) + $5~10 (LCU,取決於流量/新連線/規則數) | LCU 包含:新連線數、活躍連線數、處理的規則數、流量。即使流量小,固定費用跑不掉。 |
| WAF v2 | $5 / WCU / 月$1 / rule / 月 | $5–10 起 | 例如:1 個 WebACL (5 WCU) + 幾條規則 (3–5 條),就要 $8–10/月。流量大會再算 request 費用。 |
| Cognito (OIDC/OAuth2 驗證) | MAU (Monthly Active User) 計價:前 50k user 免費 | 0 | 如果只是內部 demo,幾十個帳號基本免費。企業大流量才開始收費。 |
把驗證/限流前移到 Edge,能就近終止 TLS 與擋壞流量;有效請求雖多了極薄的邊緣處理開銷,但整體體感更快、更穩。
| 路徑 | 連線段 | 典型影響 |
|---|---|---|
| 直連 ALB | 使用者→東京 ALB | 單段往返;少一跳、理論上最短。 |
| Cloudflare(Pages/Worker/Access)→ EC2 | 使用者→最近邊緣 →(邊緣長連)→ 東京 EC2 | 邊緣終止 TLS/驗簽/快取;有效請求多 +5~15ms;無效請求在邊緣就被丟棄,不進 AWS。 |
| Cloudflare Tunnel | 邊緣→EC2 走 tunnel | 和直連來源相比,通常再 +數毫秒~十餘毫秒;但保持長連線、HTTP/2/壓縮,可抵銷一部分。 |
註:AWS WAF 綁在 ALB,能在 ALB 就擋下,不會到 EC2,但已進到 AWS 區域與 ALB。
跟認證有關的設定全部都用 worker 在 Edge 處理掉、前端與 API 同域治理,可以讓環境配置更單純一些:
| 面向 | Cloudflare Edge(Pages + Worker + Access) | AWS ALB + WAF + Cognito(傳統) |
|---|---|---|
| 域名/SSL | Pages 與 API Worker 同域,一份 SSL | 前後端分域:ALB + ACM + Route53,多處配置 |
| CORS/Headers | 於 Worker 統一處理,前端/API 一致 | ALB 與後端各自配置,規則重複,易錯 |
| 基建複雜度 | 單一控制點(Edge),配置少 | 三套服務協作(ALB + WAF + Cognito) |
主要原因是因為筆者個人習慣用 Secret Manager,差異如下表,有版本 Stage 功能的話可以防止 Secret 更新後 App 直接連不到 DB 之類的連線中斷問題。如果是 Demo 之類的想極致省錢其實用 Parameter Store 也可以用。
| 功能 | Parameter Store (SecureString) | Secrets Manager |
|---|---|---|
| 加密 | ✅ KMS | ✅ KMS |
| IAM 控制 | ✅ | ✅ |
| CloudTrail 紀錄 | ✅ | ✅ |
| Rotation(自動換密碼) | ❌ 自己寫 | ✅ 內建 RDS/Aurora、自訂 Lambda |
版本 Stage (AWSCURRENT / AWSPREVIOUS) |
❌ 沒有 | ✅ 有 |
| 定位 | 泛用參數抽屜 | 專門密碼保險箱 |
Parameter Store vs Secret Manager
請 OpenAI 幫忙畫了一張圖(?)

今天做了三件事,把「能跑」推進到「能上雲」:
這篇不是「怎麼跑起來」,而是「怎麼花小錢、保留升級路徑地跑起來」。
如果想讓 Demo 更接近生產水準,Day28 就是那第一道上雲門檻。
明天(Day29) 會把 Day27 的後端透過 GitHub CI/CD 搬上 EC2,補上自動化與安全細節。